# 编译器
CC = gcc
# 编译选项
CFLAGS = -Wall -fPIC
# 链接选项
LDFLAGS = -shared
# 动态库名称
LIB_NAME = libmath.so
# 可执行文件名称
TARGET = math_demo

# 默认目标
all: $(LIB_NAME) $(TARGET)

# 编译动态库
$(LIB_NAME): math_lib.c math_lib.h
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ math_lib.c

# 编译主程序
$(TARGET): main.c $(LIB_NAME)
	$(CC) $(CFLAGS) -o $@ main.c -L. -lmath

# 运行程序（设置库路径）
run: $(TARGET)
	export LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH && ./$(TARGET)

# 检查依赖
check:
	@echo "检查可执行文件的依赖："
	ldd $(TARGET)
	@echo "\n检查动态库的符号："
	nm -D $(LIB_NAME) | grep T

# 清理
clean:
	rm -f $(TARGET) $(LIB_NAME) *.o

# 安装到系统目录（需要sudo）
install: $(LIB_NAME)
	sudo cp $(LIB_NAME) /usr/local/lib/
	sudo ldconfig

.PHONY: all run check clean install
